
package basedatos;

import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.NoResultException;
import javax.persistence.Query;
import modulos.usuario.modelo.Cuenta_Usuario;
import modelo.Persona;
import modulos.usuario.modelo.Usuario;

/**
 *
 * @author caesar
 */
public class UsuarioBD extends OperacionesBD
{
    
     public  int persistir(Object object)
    {
        int ok =0;
        
        try
        {
            entidad.getTransaction().begin();
            entidad.persist(object);
            entidad.getTransaction().commit();
            return 1;
        }catch(Exception ex)
        {
            ex.getMessage();
            entidad.getTransaction().rollback();
            return 0;
        }
    }
    
    public int deleteRegistro(String cmdSql, int idReg)
    {
        try
        {
            entidad.getTransaction().begin();
            Query q = entidad.createNamedQuery(cmdSql).setParameter("id", idReg);//entidad.createQuery(cmdSql).setParameter("id", idReg);
            q.executeUpdate();
            entidad.getTransaction().commit();
            return 1;
        }catch(Exception ex)
        {
            ex.getMessage();
            entidad.getTransaction().rollback();
            return 0;
        }
    }
    
    public int updateRegistro1(String cmdSql, int idReg)
    {//19jn no usado
        try
        {
            entidad.getTransaction().begin();
            Query q = entidad.createNamedQuery(cmdSql).setParameter("id", idReg);//entidad.createQuery(cmdSql).setParameter("id", idReg);
            q.executeUpdate();
            entidad.getTransaction().commit();
            return 1;
        }catch(Exception ex)
        {
            ex.getMessage();
            entidad.getTransaction().rollback();
            return 0;
        }
    }
    
    public int updateRegistro(Cuenta_Usuario eCu)//utilizado
    {
        try
        {
            Cuenta_Usuario cu = new Cuenta_Usuario();
            entidad.getTransaction().begin();
            cu =entidad.getReference(Cuenta_Usuario.class, eCu.getId());
            cu.setTipo(eCu.getTipo());
            cu.setEstado(eCu.getEstado());
            cu.setNomUsuario(eCu.getNomUsuario());
            cu.setClave(eCu.getClave());
            entidad.getTransaction().commit();
            return 1;
        }catch(Exception ex)
        {
            ex.getMessage();
            entidad.getTransaction().rollback();
            return 0;
        }
        
    }
    public int updateUsuario(Usuario eU)
    {
        try
        {
            Usuario u = new Usuario();
            u = entidad.getReference(Usuario.class, eU.getIdPersona());
            u.setCedula(eU.getCedula());
            u.setEspecialidad(eU.getEspecialidad());
            u.setActividad(eU.getActividad());
            u.setEstudios(eU.getEstudios());
            u.setGenero(eU.getGenero());
            if(modificar(u))
                return 1;
            return 0;
        }catch(Exception ex)
        {
            ex.getMessage();
            return 0;
        }
       
    }
    public int updatePersona(Persona eP)
    {
        try
        {
            Persona p = new Persona();
            p = entidad.getReference(Persona.class, eP.getIdPersona());
            p.setNombre(eP.getNombre());
            p.setApellido(eP.getApellido());
            p.setTelefono(eP.getTelefono());
            p.setFax(eP.getFax());
            p.setCelular(eP.getCelular());
            if(modificar(p))
                return 1;
            return 0;
        }catch(Exception ex)
        {
            ex.getMessage();
            return 0;
        }
        
    }
    
    public List getUsuario(Cuenta_Usuario eCu)
    {
        List lstResult = null;
        try
        {
            entidad.getTransaction().begin();
            String sql= "Select * from Cuenta_Usuario Where usuario =\'"+ eCu.getNomUsuario() +"\'";
            
            Query q = entidad.createNativeQuery(sql);
            lstResult = (List)q.getSingleResult();
            entidad.getTransaction().commit();
            return lstResult;
        }catch(NoResultException ex)
        {
            entidad.getTransaction().rollback();
            return null;
        }catch(Exception ex)
        {
            entidad.getTransaction().rollback();
            return null;
        }
    }
    
     public static List<Cuenta_Usuario> lista(String cmdSql, String nomUsuario) 
     {
         List<Cuenta_Usuario> lista = null;
         
         try 
         {
             entidad.getTransaction().begin();
             Query q = entidad.createQuery(cmdSql).setParameter("usuario", nomUsuario);
             lista = q.getResultList();
             entidad.getTransaction().commit();
             return lista;
         } catch (Exception e) {
            entidad.getTransaction().rollback();
            return null;////revisar el retorno de este null
         }
     }
     
     public int getManager()
     {
         int numUsuarios = 0;
         
         try 
         {
             entidad.getTransaction().begin();
             Query q = entidad.createQuery("Select Count(cu) From Cuenta_Usuario cu");
             numUsuarios = Integer.parseInt( q.getSingleResult().toString());
             entidad.getTransaction().commit();
             return numUsuarios;
         }catch (Exception e) {
             entidad.getTransaction().rollback();
             return 0;
         }
     }
     
     public Cuenta_Usuario selectUsuarioDefault()
     {
         try
         {
             //entidad.getTransaction().begin();
             Cuenta_Usuario cu = entidad.find(Cuenta_Usuario.class, 1);
             return cu;
         }catch(Exception ex)
         {
             ex.getMessage();
             return null;
         }
        
     }
     
     public List selectAllUsuarios(String cmdSql)
     {//invc dd reservacions
         try
         {
            List lsUsr = null;
            entidad.getTransaction().begin();
            Query q = entidad.createQuery(cmdSql);
            lsUsr = q.getResultList();
            entidad.getTransaction().commit();
            return lsUsr;
         }catch(Exception ex)
         {
             ex.getMessage();
             entidad.getTransaction().rollback();
             return null;
         }
         
     }
     
     public int selectAtributo(String cmdSql)//p verif atributos duplicados como cedula y usuario
     { 
         int numUsuarios = 0;
         
         try 
         {
            entidad.getTransaction().begin();
            Query q = entidad.createNativeQuery(cmdSql);
            numUsuarios = Integer.parseInt( q.getSingleResult().toString());
            entidad.getTransaction().commit();
            return numUsuarios;
         }catch (NoResultException ex) 
         {
             entidad.getTransaction().rollback();
             return 0;
         }catch(Exception ex)
         {
             ex.getCause();
             entidad.getTransaction().rollback();
             return 0;
         }
     }
     
     public List<Object[]> selectAtributosAll(String cmdSql, String nomusuario)
     {//cu,u,p
         List<Object[]> obj = null;
         try 
         {
            entidad.getTransaction().begin();
            Query q = entidad.createQuery(cmdSql).setParameter("usuario", nomusuario);
            obj = q.getResultList();  
            entidad.getTransaction().commit();
            return obj;
         }catch (NoResultException ex) {
            entidad.getTransaction().rollback();
            return null;
         }catch(Exception ex)
         {
             ex.getCause();
             entidad.getTransaction().rollback();
             return null;
         }
     }
}//cls